\section{10. Software arkitektur}

\begin{center}
\line(1,0){500}
\end{center}

\begin{itemize}
\item Redegøre for begrebet softwarearkitektur. 
\item Hvordan udarbejdes en software arkitektur? 
\item Hvorledes dokumenteres en software arkitektur? 
\item Hvorledes udarbejdes og dokumenteres en concurrency model? 
\end{itemize}
\begin{center}
\line(1,0){500}
\end{center}

\subsubsection{Softwarearkitektur}
\begin{itemize}
    \item Definerer den højniveau struktur af programmet
    \item Hvilke structures findes, og hvordan er relationerne imellem dem
    \item Egenskaber for elementer og relationer
    \item \textit{"Things that people perceive as hard to change"}
    \item "Rammen" der fyldes implementering ind i
\end{itemize}
\subsubsection{Udarbejdning af Softwarearkitektur}
\begin{itemize}
    \item "Stort overordnet design pattern"
    \item MVVM, MVC, Data Warehouse
    \item Skal i visse tilfælde vide hvilke teknologier der er tilgængelige (MVVM databinding f.eks.)
\end{itemize}
\subsubsection{Dokumentation af softwarearkitektur}
\begin{itemize}
    \item 4-1 architectural view model\\
    \includegraphics[scale=0.8]{10-4+1}
    \begin{itemize}
        \item Arkitekturen illustreres ved brug af fire forskellige Views
        \item Logisk View: Funktionaliteten til slut-brugeren, præsenteres ved:
        \begin{itemize}
            \item Klassediagram, Sekvensdiagram (communication diagram)
        \end{itemize}            
        \item Udviklings View: Programmørens perspektiv, præsenteres ved:
        \begin{itemize}
            \item UML Komponent diagram, Package Diagram
        \end{itemize}
        \item Process View: Dynamisk aspekt af programmet, runtime behaviour, tråde/tasks, præsenteres ved:
        \begin{itemize}
            \item Activity Diagram
        \end{itemize}
        \item Fysisk View: System ingeniørens view, deployment view, præsenteres ved:
        \begin{itemize}
            \item Deployment diagram
        \end{itemize}
        \item Scenarier: Use cases, beskrivelse af interaktion mellem objekter
        
    \end{itemize}
\end{itemize}
\subsubsection{Udarbejdning og dokumentation af concurrency model}
\includegraphics[scale=0.6]{10-concurrency-uml}
\begin{itemize}
    \item Double streger i siden illustrerer en task    
    \item Streg i bunden illustrere en beskyttet klasse
\end{itemize}
\textbf{Task Identifikation}
\begin{itemize}
    \item Alle asynkrone events skal håndteres af en dedikeret task
    \begin{itemize}
        \item Events findes derfor
    \end{itemize}
    \item Hver tidsinitieret hændelse skal behandles af en task
    \item En hændelse kan være koblet til interrupt eller pollet af en task   
    \textbf{Gruppering} 
    \item \textbf{Single event groups}
    \begin{itemize}
        \item \item Task clustering - hvert event behandles af sin egen task, events grupperes om muligt i en cluster i en enkelt task
    \end{itemize}
    \item \textbf{Event Source}
    \begin{itemize}
        \item Events fra samme kilde håndteres i en task
        \item Interface device, specialisering af Event Source
    \end{itemize}
    \item \textbf{Sequential processing}4
    \begin{itemize}
        \item Sekventielle operation kan grupperes i samme task
    \end{itemize}
    \item \textbf{Related Information}
    \begin{itemize}
        \item Information af samme type behandles i en task
    \end{itemize}
    \item \textbf{Arrival Pattern}
    \item \textbf{Target object / computationally intensive processing}
    \begin{itemize}
        \item Tidskrævende operationer kan udføres i f.eks. en baggrunds task med lavere prioritet
    \end{itemize}
    \item \textbf{Purpose}
    \begin{itemize}
        \item En task udfører et bestem formål (f.eks. use case)
    \end{itemize}
    \item \textbf{Safety Concerns}
    \begin{itemize}
        \item F.eks. watchdog timer
        \item God regel: separation af overvågning og påvirkning
    \end{itemize}
     \textbf{Strukturering af tasks}
     \begin{enumerate}     
     \item Device interface tasks
     \item Control tasks
     \item Periodic tasks	     
     \item other internal tasks
     \end{enumerate}
\end{itemize}